平时上课还是很忙,就只有晚上抽点时间学学。
IDE用的是qt creator,很好用。
《C++ GUI Programming with Qt 4》看到第二章结束。自己写了一个替换对话框。先贴自己的读书笔记,代码最后贴。
QLabel 可以显示html代码
QObject::connect( button,SIGNAL(clicked()),&app,SLOT(quit()));
SIGNAL(func1()) SLOT(func2()) 当func1被调用(产生信息),func2也被调用
emit 触发信号 宏
qt对话框是对QDialog类的继承 要使用signals 和 slots 要包含 Q_OBJECT
moc 类定义必须放在头文件而不能放在实现文件中
信号和槽:
一个信号连接多个槽 槽的调用顺序是随机的
信号可以和信号连接 但一个信号发出 另一个信号也将发出
信号和槽函数必须有着相同的参数类型 如果信号里的参数个数多于槽函数的参数
使用 designer
建立cell.ui文件 在代码中就包含 ui_cell.h头文件 类为 UI::Name
通常对该类进行继承来完成其他功能 在cell.h头文件中完成继承 在代码中就可以直接使用cell.h头文件了
setupUi函数可以画出设计好的界面
一个控件如果有父控件,那么在父控件被删除以后 子控件也会被自动删除
使用qt Designer 可以不改变源程序的情况下改变对话框的设计
对ui的继承可以使用 单继承和多继承 单继承要在类内保存ui的指针 多继承申明以后的类可以直接使用
动态对话框:
子控件可以用QObject::findChild()得到
QComboBox *primaryColumnCombo = sortDialog->findChild("primaryColumnCombo");
QUiLoader 类在一个单独的链接库中,如果在一个应用程序中使用了QUiLoader,必须在这个程序的.pro 文件中添加下面这样的代码:CONFIG += uitools
使用动态对话框不用重新编译程序就能够改变对话框的布局
我对ui文件中类的继承是多继承方式。
先是ui文件
FindDialog 0 0 542 301 Dialog 20 230 61 16 需匹配字符 20 260 71 16 设定样式头部 20 10 501 201 110 230 321 20 110 260 131 20 260 260 31 20 尾部 300 260 131 20 false 450 230 75 23 Find 450 260 75 23 Close
finddialog.h
#ifndef FINDDIALOG_H #define FINDDIALOG_H #include #include "ui_finddialog.h" class FindDialog : public QDialog,public Ui::FindDialog { Q_OBJECT public: FindDialog(QWidget *parent = 0); private slots: void slCanUse(); void slWork(); }; #endif // FINDDIALOG_H
finddialog.cpp
#include "finddialog.h" #include FindDialog::FindDialog(QWidget *parent) : QDialog(parent) { setupUi(this); connect( pb_close,SIGNAL(clicked()),this,SLOT(close())); connect( led_match,SIGNAL(textChanged(QString)),this,SLOT(slCanUse())); connect( led_head,SIGNAL(textChanged(QString)),this,SLOT(slCanUse())); connect( led_tail,SIGNAL(textChanged(QString)),this,SLOT(slCanUse())); connect( pb_find,SIGNAL(clicked()),this,SLOT(slWork())); } void FindDialog::slCanUse() { QString sm = led_match->text(),sh = led_head->text(),st = led_tail->text(); pb_find->setEnabled( sm.size() && sh.size() && st.size() ); } void FindDialog::slWork() { QString originalStr,takeStr; takeStr = led_head->text() + led_match->text() + led_tail->text(); originalStr = ted_string->toPlainText(); originalStr.replace(led_match->text(),takeStr); ted_string->setHtml(originalStr); }
main.cpp
#include #include "finddialog.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); FindDialog w; w.show(); return a.exec(); }