1.简单介绍: 1.1 三个常用类(Qwidget类、QDialog类、QMainwindow类) Qwidget类:继承与QObject类和QPaintdevice类,所有用户界面对象的基类,常用于嵌入到其他窗体的界面; QDialog类:继承与QWeidget类,对话框窗口的基类,用于创建顶级对话框; QMainwindow类:继承与QWeidget类,菜单、工具、状态条的主应用程序窗口。 1.2三种对话框类型: 模式对话框:窗口创建后,主窗口的其他内容都不能执行,只有等退出该窗口后才能执行。其中用exec()函数来阻塞。举个简单例子(在主窗口框架下插入如下代码):
QApplication a(argc, argv); MainWindow w; w.setWindowTitle("原始主界面"); w.show(); //基于主窗体新建一个对话框 QDialog *dlg=new QDialog(&w); dlg->setWindowTitle("我是模式对话框,不许动,你要等着我"); dlg->exec();//阻塞 w.setWindowTitle("我可以变了,终于等到你"); return a.exec();
运行结果:新建的对话框不关闭,主窗体不可以点击和运行: 非模式对话框:窗口创建后,主窗口等其他内容不受影响,可继续执行,一般调用show()函数显示。举个简单例子(在主窗口框架下插入如下代码):
int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.setWindowTitle("原始主界面"); w.show(); //基于主窗体新建一个对话框 QDialog *dlg=new QDialog(&w); dlg->setWindowTitle("我是非模式对话框,你不用等我了"); dlg->show(); //此时重新设置主界面标题可继续执行 w.setWindowTitle("我变了,不等你了"); return a.exec(); }
运行结果:新建的对话框不关闭,主窗体照样可以点击和运行 半模式对话框:主对话框无法点击但后台程序可继续运行,常调用setModal(true),和setWindowModality()。举个简单例子(在主窗口框架下插入如下代码): 运行结果:新建的对话框不关闭,主窗体照样不可以点击但其他程序可以继续运行 1.3 信号和槽:其实这里的信号和槽相当于MFC中的消息和消息处理函数。二者之间的关联方式有三种: connect关联:首先定义槽函数,然后连接connect(,,,)(具体参数可参见代码)实现连接。代码实现: 首先设置三个buttun按钮和三个label控件: //类内定义槽函数:
private slots: void setconnect();
右键转到定义:
void Widget::setconnect() { ui->label->setText("联系到我了"); }
构造函数中调用connect函数:
connect(ui->connectbutton,SIGNAL(clicked(bool)),this,SLOT(setconnect()));
设计模式中的关联:F4,左键单击发送信号的部件并拖到指定位置实现自动关联 自动关联:右键,转到槽 后两种方法简单方便,但代码可读性较差,代码量较大时不建议使用。 (参考自李浩林老师的课程讲解 https://edu.51cto.com/lecturer/12895564.html)