目录
前言
记录有关qt的案例。
QT
小记
- 知识点:
- 1. ui_widget.h:类的名称是Ui_widget.h,根据组件、信号与信号槽自动生成。
- 2. 数学运算函数在 <QtMath> 头文件中定义
- 3. 消息显示: qDebug,qWarning、qCritical、qFatal、qInfo
- 4. 全局宏:QT_VERSION、QT_VERSION_STR、
- 5. 容器:QList、QStack和QQueue;QMap、QMultiMap、QHash、QMultiHash和QSet。
- 6. QGridLayout类添加组件的函数是addWidget():
- 7. QAbstractButton的autoExclusive属性:如果启用了自动独占性,属于同一个父部件的可检查按钮将互斥。
- 8. QGroupBox的flat属性:可以最小化区域框的空间消耗。在大多数样式中,启用这个属性会移除框架的左边缘、右边缘和底边。
- 9. Sql模块对Cmake文件添加: find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Sql REQUIRED)
- 在target_link_libraries中添加Qt${QT_VERSION_MAJOR}::Sql
- 代码:
- 1. 编码格式
- #include <QTextCodec> //添加头文件
- QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //设置编码
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
- 2. tr()函数 =>随国际化变化。ui->pushButton->setText(tr("新窗口"));
- 4. 常用控件属性设置:
- if(ui->usrLineEdit->text().trimmed() == tr("admin")&& ui->pwdLineEdit->text() == tr("123456"))
- QLabel *lab; //声明
- this->lab=new QLabel("hello,world",this);
- ui->firstBtn->setText("新窗口");
- QMessageBox::warning(this, tr("Waring"),tr("error!"), QMessageBox::Yes);
- ui->pwdLineEdit->clear();
- ui->usrLineEdit->setFocus();
- 5. 菜单设置:
- // 创建新的动作 添加图标 设置快捷键
- QAction *openAction = new QAction(tr("&Open"), this);
- QIcon icon(":/myImages/images/close.png");
- openAction->setIcon(icon);
- openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
- ui->menu_F->addAction(openAction);
- 6. 其他:
- //记事本打开myResources.qrc //文件(&F)
- //添加资源文件=>/myImages=>images=>需要的图标文件粘贴进去=>可以别名
- 是一个XML文档
- 表明将菜单的快捷键设置为了Alt+ F
- icon(":/myImages/close");
- 7. qDebug("111"+str); qDebug()<<"111";
- 8. //设置粗体,斜体,下划线 设置字体颜色:
- QFont font=ui->plainTextEdit->font();
- font.setBold(checked);//font.setItalic(checked);font.setUnderline(checked);
- ui->plainTextEdit->setFont(font);
- QPalette plet=ui->plainTextEdit->palette();
- if(ui->radioButton_black->isChecked())
- plet.setColor(QPalette::Text,Qt::black);
- if(ui->radioButton_blue->isChecked())
- plet.setColor(QPalette::Text,Qt::blue);
- if(ui->radioButton_red->isChecked())
- plet.setColor(QPalette::Text,Qt::red);
- ui->plainTextEdit->setPalette(plet);
- QPushButton btn("button");
- QObject::connect(&btn,&QPushButton::clicked,&QApplication::quit);
- QObject::connect(&btn,&QPushButton::clicked,[](bool) {
- qDebug() << "You clicked me!";
- });
- btn.show();
- 9. Q_UNUSED(name)//这个宏用于在函数中定义不在函数体里使用的参数
- void MainWindow::on_imageSaved(int id, const QString &fileName)
- { Q_UNUSED(id);
- LabInfo->setText ("图片保存为:"+ fileName);}
- 10. 布局分布管理 stretch
- layoutStretch:0,0,0,表示3个组件平均分配宽度
- layoutStretch:0,0,1,表示前两个组件达到合适宽度后不再增加宽度,其余的空间都分配给第三个组件
- layoutStretch:1,1,2,表示前两个组件达到合适宽度后将尽量满足1:1:2的比例
- 11. 分割条允许用户通过拖动子widget之间的边界来控制子widget的大小。
- QSplitter *splitter = new QSplitter(parent);
- QListView *listview = new QListView;
- QTreeView *treeview = new QTreeView;
- QTextEdit *textedit = new QTextEdit;
- splitter->addWidget(listview);
- splitter->addWidget(treeview);
- splitter->addWidget(textedit);
- //splitter->setOrientation(Qt::Vertical);
- 12. foreach
- QList<QString> values;
- foreach (QString str, values)
- qDebug() << str;
- 13.
- // 移除帮助按钮。windowFlags() 当前窗口的标志位(flags)、取反,按位与运算
- setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- //用户使用键盘快捷键时,可以通过按下 "Alt + S" 来聚焦到 styleComboBox。
- auto styleLabel = createWidget1<QLabel>(tr("&Style:"), "styleLabel");
- styleLabel->setBuddy(styleComboBox);
- //全局快捷键:
- new QShortcut(tr("Ctrl+p"), this, this, &WidgetGallery::demo);
- demo是一个信号
- //参数带入,版本宏
- setWindowTitle(tr("Widget Gallery Qt %1").arg(QT_VERSION_STR));
- qDebug() << "Qt version: " << QT_VERSION;
- qDebug() << "Qt major version: " << QT_VERSION_MAJOR;
- qDebug() << "Qt minor version: " << QT_VERSION_MINOR;
- qDebug() << "Qt patch version: " << QT_VERSION_PATCH;
- 999. QMetaObject类
- int main(int argc, char *argv[]){
- QApplication a(argc, argv);
- //QObject::metaObject返回类关联的元对象
- QObject *btn = new QPushButton;
- qDebug()<<btn->metaObject()->className(); //返回“QPushButton”
- QPushButton *btnPush=qobject_cast<QPushButton*>(btn);//qobject_cast类似于标准C++中的dynamic_cast
- qDebug()<<btnPush->metaObject()->className();
- QTimer *timer = new QTimer(); //QTimer是QObject的子类
- qDebug()<<timer->inherits("QTimer"); //返回true
- qDebug()<<timer->inherits("QObject"); //返回true
- qDebug()<<timer->inherits("QAbstrctButton");//返回false
- //superClass返回父类的元对象
- qDebug()<<btn->metaObject()->superClass()->className();
- }
- 1000:属性系统:
- Q_PROPERTY(bool focus READ hasFocus)
- Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
- Q_PROPERTY(QCursor cursor READ cursor WRITE SetCursor RESET unsetCursor)
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QPushButton *button = new QPushButton;
- QObject *object = button;
- bool isFlat = object->property("flateee").toBool();
- qDebug()<<isFlat;
- object->setProperty("flateee",true);
- isFlat = object->property("flateee").toBool();
- qDebug()<<isFlat;
- const QMetaObject *meta=object->metaObject();
- int index=meta->indexOfProperty("down");
- QMetaProperty prop=meta->property(index);
- bool res=prop.isWritable();
- qDebug()<<" down(QPushButton) isWritable?: "<<res;
- }
- 1001:类的附加信息
- Q_OBJECT
- Q_CLASSINFO("author","Wang")
- Q_CLASSINFO("compay","UPC")
- Q_CLASSINFO("version","3.0.1")
- QMyWidget * myWidget = new QMyWidget;
- qDebug()<<myWidget->metaObject()->classInfo(0).name();
- qDebug()<<myWidget->metaObject()->classInfo(0).value();
- qDebug()<<myWidget->metaObject()->classInfo(1).name();
- qDebug()<<myWidget->metaObject()->classInfo(1).value();
- 1002. 自定义信号及其使用:
- class QPerson:public QObject
- {
- Q_OBJECT
- private:
- int m_age = 10;
- public:
- void incAge();
- signals:
- void ageChanged(int value);
- };
- void QPerson::incAge() { m_age++; emit ageChanged(m_age); //发射信号
- 1003:容器:
- QList<float> list; //定义一个float类型的数据列表
- QList<int> list={1,2,3,4,5};//初始化列表数据
- QList<int> list(100); //初始化列表元素个数为100,所有元素默认为0
- QList<QString> strList(10,"pass");//10个元素,每个元素都被初始化为pass
- QList<QString> list;
- list<<"Monday"<<"Tuesday"<<"Wednesday"<<"Thursday";
- list.append("Friday");
- QString str1=list[0]; //QList::const_reference QList::operator[](qsizetype i) const
- QString str2=list.at(1);
- //------------
- QMap<QString, int> map;
- map["one"] = 1;
- map["three"] = 3;
- map["seven"] = 7
- map.insert("twelve", 12);
- int num1 = map["one"];
- //如果在map中没有指定键的项,这些函数返回一个默认构造的值。
- int num2 = map["thirteen"];
- int num3 = map.value("thirteen");
- //还有一个value()重载方法,如果指定的键不存在,则使用第二个参数作为默认值
- int num4 = map.value("thirteen",13);
复制代码
3. 任务管理器
- QApplication a(argc, argv);
- MainWindow mainWindow;
- // 创建菜单栏
- QMenuBar *menuBar = mainWindow.menuBar();
- QMenu *fileMenu = menuBar->addMenu("文件");
- QMenu *editMenu = menuBar->addMenu("编辑");
- // 创建工具栏
- QToolBar *toolBar = mainWindow.addToolBar("工具栏");
- toolBar->addAction("打开");
- toolBar->addAction("保存");
- toolBar->addSeparator();
- toolBar->addAction("剪切");
- toolBar->addAction("复制");
- toolBar->addAction("粘贴");
- // 创建状态栏
- QStatusBar *statusBar = mainWindow.statusBar();
- statusBar->showMessage("准备就绪");
- mainWindow.setGeometry(100, 100, 800, 600); // 设置主窗口的位置和大小
- mainWindow.setWindowTitle("Qt 示例应用程序");
- mainWindow.show();
复制代码
4. 链接数据库mysql,sqlite
- #include <QApplication>
- #include <QMainWindow>
- #include <QMenuBar>
- #include <QMenu>
- #include <QToolBar>
- #include <QTextEdit>
- #include <QStatusBar>
- #include <QMessageBox>
- #include <QInputDialog>
- #include <QLabel>
- #include <QPushButton>
- #include <QFile>
- #include <QVBoxLayout>
- #include <QFileDialog>
- class CustomDialog : public QDialog
- {
- public:
- CustomDialog(QWidget *parent = nullptr)
- : QDialog(parent)
- {
- setWindowTitle("自定义对话框");
- QLabel *label = new QLabel("请输入文本:", this);
- lineEdit = new QLineEdit(this);
- QPushButton *okButton = new QPushButton("确定", this);
- QPushButton *cancelButton = new QPushButton("取消", this);
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(label);
- layout->addWidget(lineEdit);
- layout->addWidget(okButton);
- layout->addWidget(cancelButton);
- setLayout(layout);
- connect(okButton, &QPushButton::clicked, this, &CustomDialog::accept);
- connect(cancelButton, &QPushButton::clicked, this, &CustomDialog::reject);
- }
- QString getText() const
- {
- return lineEdit->text();
- }
- private:
- QLineEdit *lineEdit;
- };
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QMainWindow mainWindow;
- QMenuBar *menuBar = mainWindow.menuBar();
- QMenu *fileMenu = menuBar->addMenu("文件");
- QMenu *editMenu = menuBar->addMenu("编辑");
- QToolBar *toolBar = mainWindow.addToolBar("工具栏");
- QTextEdit *textEdit = new QTextEdit(&mainWindow);
- mainWindow.setCentralWidget(textEdit);
- QStatusBar *statusBar = mainWindow.statusBar();
- // 在菜单栏和工具栏中添加操作
- QAction *openAction = fileMenu->addAction("打开");
- QAction *saveAction = fileMenu->addAction("保存");
- fileMenu->addSeparator();
- QAction *customDialogAction = editMenu->addAction("自定义对话框");
- toolBar->addAction(openAction);
- toolBar->addAction(saveAction);
- toolBar->addSeparator();
- toolBar->addAction(customDialogAction);
- QObject::connect(openAction, &QAction::triggered, [&]() {
- QString fileName = QFileDialog::getOpenFileName(&mainWindow, "打开文件");
- if (!fileName.isEmpty()) {
- QFile file(fileName);
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- textEdit->setPlainText(file.readAll());
- file.close();
- }
- }
- });
- QObject::connect(saveAction, &QAction::triggered, [&]() {
- QString fileName = QFileDialog::getSaveFileName(&mainWindow, "保存文件");
- if (!fileName.isEmpty()) {
- QFile file(fileName);
- if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
- QTextStream out(&file);
- out << textEdit->toPlainText();
- file.close();
- }
- }
- });
- QObject::connect(customDialogAction, &QAction::triggered, [&]() {
- CustomDialog dialog(&mainWindow);
- if (dialog.exec() == QDialog::Accepted) {
- QString text = dialog.getText();
- if (!text.isEmpty()) {
- statusBar->showMessage("自定义对话框输入: " + text, 5000);
- }
- }
- });
- mainWindow.setGeometry(100, 100, 800, 600);
- mainWindow.setWindowTitle("高级 Qt 示例");
- mainWindow.show();
- return app.exec();
- }
复制代码 QT-For-Python
1. Demo
- #include <QApplication>
- #include <QMainWindow>
- #include <QListWidget>
- #include <QMenuBar>
- #include <QMenu>
- #include <QAction>
- #include <QInputDialog>
- class TaskManager : public QMainWindow
- {
- Q_OBJECT
- public:
- TaskManager(QWidget *parent = nullptr)
- : QMainWindow(parent)
- {
- setWindowTitle("任务管理器");
- taskList = new QListWidget(this);
- setCentralWidget(taskList);
- createMenus();
- }
- private:
- QListWidget *taskList;
- void createMenus()
- {
- QMenu *taskMenu = menuBar()->addMenu("任务");
- QAction *addAction = taskMenu->addAction("添加任务");
- connect(addAction, &QAction::triggered, this, &TaskManager::addTask);
- QAction *removeAction = taskMenu->addAction("删除任务");
- connect(removeAction, &QAction::triggered, this, &TaskManager::removeTask);
- QAction *completeAction = taskMenu->addAction("完成任务");
- connect(completeAction, &QAction::triggered, this, &TaskManager::completeTask);
- }
- private slots:
- void addTask()
- {
- bool ok;
- QString taskName = QInputDialog::getText(this, "添加任务", "输入任务名称:", QLineEdit::Normal, "", &ok);
- if (ok && !taskName.isEmpty()) {
- taskList->addItem(taskName);
- }
- }
- void removeTask()
- {
- QListWidgetItem *selectedItem = taskList->currentItem();
- if (selectedItem) {
- delete selectedItem;
- }
- }
- void completeTask()
- {
- QListWidgetItem *selectedItem = taskList->currentItem();
- if (selectedItem) {
- selectedItem->setFlags(selectedItem->flags() | Qt::ItemIsUserCheckable);
- selectedItem->setCheckState(Qt::Checked);
- }
- }
- };
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- TaskManager taskManager;
- taskManager.show();
- return app.exec();
- }
- #include "main.moc" // 使用Qt的元对象系统时需要的moc文件
复制代码 QT-Quick
1. HelloWorld
- 1. cmake:
- find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Sql REQUIRED)
- target_link_libraries(20231121_C1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)
- 2. 将本地的mysql:
- D:\mysql-5.7.37-winx64\lib: libmysql.lib、libmysqld.lib 放置E:\QT\Qt4.6\6.5.2\msvc2019_64\bin目录下;
- 重启qt;
- 3.代码测试:
- //代码:
- #include "QtSql/qsqlquery.h"
- #include <QCoreApplication>
- #include <QtSql>
- #include <QDebug>
- #include <QSqlDatabase>
- #include <QSqlQuery>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动
- foreach(QString driver, drivers)
- qDebug() << driver;
- // 设置 SQLite 数据库连接
- // QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- //db.setDatabaseName("mydatabase.db");
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("127.0.0.1");
- db.setPort(3306);
- db.setDatabaseName("mydata");
- db.setUserName("root");
- db.setPassword("123456");
- // 打开数据库
- if (!db.open()) {
- qDebug() << "无法打开数据库";
- return -1;
- }
- // // 在数据库中创建表
- // QSqlQuery query;
- // query.exec("CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY, name TEXT)");
- // // 插入数据
- // query.prepare("INSERT INTO tasks (name) VALUES (:name)");
- // query.bindValue(":name", "完成 Qt 学习");
- // query.exec();
- // query.bindValue(":name", "写一个小程序");
- // query.exec();
- // 查询数据
- QSqlQuery query;
- query.exec("SELECT * FROM student");
- while (query.next()) {
- int id = query.value("id").toInt();
- QString name = query.value("name").toString();
- qDebug() << "任务 ID:" << id << ", 任务名称:" << name;
- }
- // 关闭数据库
- db.close();
- return a.exec();
- }
复制代码 2. 简单表单
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |