找回密码
 立即注册
收起左侧
楼主: yafeilinux

第2篇 基础(二)编写Qt多窗口程序

257
回复
222464
查看
  [复制链接]
累计签到:6 天
连续签到:1 天
2014-3-15 23:27:40 显示全部楼层
老师,您好,看了老师的程序很明了,一直运行下去是不会有问题的。但是像老师所调用的
#include <QTextCodec> //添加头文件
#include "logindlg.h" //添加头文件
这些头文件,做为初学者,我从哪里能摄取到,字体转换是用这个头文件里面的函数了,请问哪里有说明吗?
比如什么动作大至调用什么函数,用什么文件等信息??
回复 支持 反对

使用道具 举报

累计签到:1206 天
连续签到:1 天
2014-3-18 09:45:50 显示全部楼层
jutyy 发表于 2014-3-15 23:27
老师,您好,看了老师的程序很明了,一直运行下去是不会有问题的。但是像老师所调用的
#include  //添加头 ...

这个学习过程就是积累的过程,调用相应的头文件就是为了使用其中的函数。你也可以先不添加这个头文件,看看运行提示的错误,就知道哪里需要它了。

想了解Qt库里面的函数,需要看Qt帮助文档的。
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2014-3-20 16:04:05 显示全部楼层
在源码3-7中打开颜色对话框,我尝试用非模态的方式打开,dialog.show();,但是打不开颜色对话框,打开就闪出来,单可以输出颜色信息,这是为什么啊?
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2014-3-21 09:48:37 显示全部楼层
怎么样打开工程啊。。。关闭以后就不能像原来那样打开了
回复 支持 反对

使用道具 举报

累计签到:1206 天
连续签到:1 天
2014-3-22 10:12:38 显示全部楼层
cathyi 发表于 2014-3-20 16:04
在源码3-7中打开颜色对话框,我尝试用非模态的方式打开,dialog.show();,但是打不开颜色对话框,打开就闪 ...

show()就是显示一下啊。dialog如果设置成指针, 然后dialog->show()这样也是可以的。
回复 支持 反对

使用道具 举报

累计签到:1206 天
连续签到:1 天
2014-3-22 10:13:06 显示全部楼层
cloudyf 发表于 2014-3-21 09:48
怎么样打开工程啊。。。关闭以后就不能像原来那样打开了

打开工程的源码中.pro文件即可。
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-3-24 09:59:19 显示全部楼层
多谢分享,整好要用到这部分。Qt新人一个,以后多来学习,
回复 支持 反对

使用道具 举报

累计签到:12 天
连续签到:1 天
2014-3-24 12:37:30 显示全部楼层
本帖最后由 elvis_w 于 2014-3-24 12:42 编辑

有个问题,我按教程在添加
  1. void MainWindow::on_pushButton_clicked()
  2. {
  3.     QDialog *dlg = new QDialog(this);
  4.     dlg->show();
  5. }
复制代码
后,点击那个按钮触发这个函数有空对话框显示,但IDE输出错误
Starting E:\QTLearn\build-nWindows-Desktop_Qt_5_2_1_MinGW_32bit-Debug\debug\nWindows.exe...
SHIMVIEW: ShimInfo(Complete)
setGeometry: Unable to set geometry 100x30+910+505 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry:  128x30+910+505 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
E:\QTLearn\build-nWindows-Desktop_Qt_5_2_1_MinGW_32bit-Debug\debug\nWindows.exe exited with code 0

请问是否正常呢?

还有如果要保留远窗口开新对话框是不是必须使用引用方式构造对象而不能直接
  1. void MainWindow::on_pushButton_clicked()
  2. {
  3.     QDialog dlg;
  4.     dlg.show();
  5. }
复制代码
我的理解对吗?

点评

我想加问一句 我可以实现改变新的空对话框的标题setWindowTitle(),但是一直不知道如何在空对话框里面加上内容?  发表于 2014-3-24 17:03
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2014-3-24 16:52:16 显示全部楼层
本帖最后由 cathyi 于 2014-3-24 18:57 编辑
cathyi 发表于 2014-3-20 16:04
在源码3-7中打开颜色对话框,我尝试用非模态的方式打开,dialog.show();,但是打不开颜色对话框,打开就闪 ...

之后加入对象指针就可以实现了,但是 还是不是特别了解exec()和show()的差别,在3—7进度对话框中设置模态对话框时,用show(),为时时更新的意思?尝试用过exec()发现进度条停在0%无变化,所以exec()为保持的意思?还有在最后希望进度对话框停在100%窗口不关闭如何实现?C:\Users\Administrator\Desktop\2
  1.   // 这样才能显示100%,因为for循环中少加了一个数
  2.     dialog.setValue(50000);

  3.     if(flag==1) qDebug() << tr("复制中断!");
  4.     else {qDebug() << tr("复制结束!");dialog.exec();}
复制代码
这样最后进度条停在0%,下面代码进度条停在99%。
  1.   // 这样才能显示100%,因为for循环中少加了一个数
  2.    dialog.exec(); dialog.setValue(50000);

  3.     if(flag==1) qDebug() << tr("复制中断!");
  4.     else qDebug() << tr("复制结束!");
复制代码
回复 支持 反对

使用道具 举报

累计签到:1206 天
连续签到:1 天
2014-3-28 20:07:47 显示全部楼层
elvis_w 发表于 2014-3-24 12:37
有个问题,我按教程在添加后,点击那个按钮触发这个函数有空对话框显示,但IDE输出错误

请问是否正常呢?

看错误提示好像是窗口位置或大写有问题,这个你需要再看下原因。


可以的,使用dlg->exec();
回复 支持 反对

使用道具 举报

累计签到:1206 天
连续签到:1 天
2014-3-28 20:10:38 显示全部楼层
cathyi 发表于 2014-3-24 16:52
之后加入对象指针就可以实现了,但是 还是不是特别了解exec()和show()的差别,在3—7进度对话框中设置模 ...

简单来说,show()函数被调用了,主程序还可以继续往下执行;而exec()函数被调用了,主程序就不能继续执行了。

这就是阻塞与非阻塞的区别。
回复 支持 反对

使用道具 举报

尚未签到

2014-4-4 16:33:10 显示全部楼层
destino74 发表于 2013-10-19 15:03
确实狗血,右键项目,执行Qmake就行了,那个人也不知道为什么。

我也是。。。简直无语。。。
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-4-9 16:20:42 显示全部楼层
非常使用 很容易入门   一直听说qt信息和槽函数  原来信号和槽就是这样的   理解点了  继续努力学习
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2014-4-11 23:06:30 显示全部楼层
我的环境QTextCodec::codecForName("utf8");可以,换成GBK不行,换成QTextCode::codecForLocale();也不行,都是乱码。

两个问题:1.为什么非要用utf-8,GBK不行? 2.为什么QTextCode::codecForLocale();不行?

求指教。
ps:xp系统,qt版本 mingw版本和楼主一样。
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-4-11 23:12:51 显示全部楼层
很好的帖子 非常受益 谢谢
回复 支持 反对

使用道具 举报

尚未签到

2014-5-3 23:00:37 显示全部楼层
谢谢
学习了

学习 了解。呵呵 谢谢
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-5-25 23:17:57 显示全部楼层
MainWindow::MainWindow(QWidget *parent) :   
        QMainWindow(parent),   
        ui(new Ui::MainWindow)
{   
        ui->setupUi(this);   
        ui->pushButton->setText("新窗口"); //将界面上按钮的显示文本更改为“新窗口”
}

我按照这么做,它就显示“新窗口”,不会乱码,怎么会在这样?
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-5-26 00:43:47 显示全部楼层
scut_zwzhang 发表于 2014-5-25 23:17
MainWindow::MainWindow(QWidget *parent) :   
        QMainWindow(parent),   
        ui(new Ui::Ma ...

问题我自己已解决。我想问一下,对于新手来说,qt里面的函数是不是要记下来?
回复 支持 反对

使用道具 举报

尚未签到

2014-5-30 00:33:33 显示全部楼层
老师您好,能问一下这两句的详细代码过程么……
“Qt的对象树机制保证了不会造成内存泄露,而且不用写delete语句”,加上delete是怎样的呢?
“严谨的童鞋也可以在mainwindow.h文件中先定义一个对话框对象,并再在构造函数中进行创建,然后再到这里使用。”
不好意思我的C++比较屎……MFC学得不好而且老师让在Linux里面跑程序,所以就上手Qt4开始学学了……
回复 支持 反对

使用道具 举报

尚未签到

2014-6-16 11:10:20 显示全部楼层
:-1: error: cannot open output file debug\untitled12.exe: Permission denied
为什么我编译会出现这种错误呀   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册