宣城市网站集约化建设西安建公司网站
宣城市网站集约化建设,西安建公司网站,合肥关键词网站排名,沧州高速公路建设管理局网站目的
Q#xff1a;如何在Qt库的基础上#xff0c;实现自定义控件呢#xff1f; A#xff1a;根据官方文档回答#xff0c;就是继承需实现的控件#xff0c;然后实现自定义功能。
以下是实现QListWidget控件的自定义item。 先看下最终效果是如何#xff1a; listItem 主…目的
Q如何在Qt库的基础上实现自定义控件呢 A根据官方文档回答就是继承需实现的控件然后实现自定义功能。
以下是实现QListWidget控件的自定义item。 先看下最终效果是如何 listItem 主界面UI
操作流程
主窗口中央控件是QListWidget点击添加按钮会随机向主窗口中央控件中添加自定义item选中某条前的可选框如果选中点击右侧的删除图标会弹出提示是否删除如果不选中右侧删除图标无法点击点击是删除当前item点击否不删除。
实现需解决问题 1如何在QListWidget中添加带有按钮、文本等其它控件的项 2选中某项后如何响应QListWidget自带的item响应为什么不生效 3如何选中删除按钮后通知QListWidget做出删除当前item的操作
示例
示例中用到的方法多为控件的成员方法如需了解更多可选择某类按F1查阅帮助文档。 首先是主窗口代码 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindownamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent nullptr);~MainWindow();private slots:// 项列表控件中添加Itemvoid on_btn_add_clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
mainwindow.cpp
#include mainwindow.h
#include ui_mainwindow.h#include QDebug
#include custemitem.h#include QMessageBoxMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btn_add_clicked()
{// 创建itemQListWidgetItem* pItem new QListWidgetItem();ui-listWidget-addItem(pItem);// 创建自定义widgetcustemItem* pCustomItem new custemItem(pItem);ui-listWidget-setItemWidget(pItem, pCustomItem);ui-listWidget-setCurrentItem(pItem);// 实现自定义信号和槽当删除时从列表中删除itemconnect(pCustomItem, custemItem::emit_del, this, [](QListWidgetItem* pItem){QMessageBox::StandardButton btn QMessageBox::information(this, QStringLiteral(提示), QStringLiteral(是否删除), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);if(QMessageBox::No btn)return;ui-listWidget-removeItemWidget(pItem);delete pItem;pItem nullptr;});
}
其次是自定义QWidget控件代码 customitem.h
#ifndef CUSTEMITEM_H
#define CUSTEMITEM_H#include QWidget
#include QListWidgetItemnamespace Ui {
class custemItem;
}class custemItem : public QWidget
{Q_OBJECTpublic:explicit custemItem(QListWidgetItem* pItem, QWidget *parent nullptr);~custemItem();signals:void emit_del(QListWidgetItem* pItem);private slots:void on_pushButton_clicked();private:Ui::custemItem *ui;QListWidgetItem* m_pItem;
};#endif // CUSTEMITEM_H
customitem.cpp
#include custemitem.h
#include ui_custemitem.h
#include defind.hcustemItem::custemItem(QListWidgetItem* pItem, QWidget *parent) :QWidget(parent),ui(new Ui::custemItem),m_pItem(pItem)
{ui-setupUi(this);ui-pushButton-setEnabled(false);// 随机(伪随机)创建一些文本int nRand qrand()%4;ui-checkBox-setText(slText.at(nRand));ui-checkBox-setIcon(QIcon(slIcon.at(nRand)));// 根据选择状态来进行删除按钮功能使能connect(ui-checkBox, QCheckBox::clicked, this, [](){ui-pushButton-setEnabled(ui-checkBox-isChecked());});
}custemItem::~custemItem()
{delete ui;
}void custemItem::on_pushButton_clicked()
{if(ui-checkBox-isChecked()){emit emit_del(m_pItem);}else{}
}
增加一个随机显示图标和文本的类 defind.h
#ifndef DEFIND_H
#define DEFIND_H#include QStringList
#include QList
#include QIcon
// 随机添加一些文本使示例看起来更加丰富
QStringList slText {12312312.mp3, dfdafds.mp4, zcvzcvzxv.txt, asdfasdfafsafdf.avi};
QListQString slIcon {:/res/mp3.png, :/res/mp4.png, :/res/TXT.png, :/res/Video.png};#endif // DEFIND_H
最后是main代码 main.cpp
#include mainwindow.h
#include QApplicationint main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
如果疑问可留言讨论。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87165.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!