Qt 界面图标显示,并显示文字注释
2013-01-16 11:40
447 查看
最近做基于QT 的界面,实现主界面调用各个应用程序,最初是在主界面添加按钮QPushButtoon,每个应用程序对应一个按钮,点击按钮调用相应的应用程序,这是最笨的一种方法,这种方法比较死板,不易于动态扩展,当添加新的应用程序的时候就需要修改主界面的代码,后来发现一种动态添加按钮的方法,并且在按上面添加图片,代码如下:
void MainWindow::createButtons()
{
QPushButton *programBtn;
QLabel *labelword;
programDir = QDir(PROGRAMPATH);
QStringList files;
int rownum,cloumnum;
files = programDir.entryList(QStringList("*"),
QDir::Files | QDir::NoSymLinks|QDir::Executable);
for (int i = 0; i < files.size(); ++i) {
rownum=i/4;
cloumnum=i%4;
// QFile file(programDir.absoluteFilePath(files[i]));
// programBtn=new QPushButton(files[i],this);
programBtn=new QPushButton(tr(""),this);
// labelword=new QLabel(files[i],this);
//labelword->setBuddy(programBtn);
connect(programBtn,SIGNAL(clicked()),this,SLOT(btnClicked()));
// connect(labelword,SIGNAL(clicked()),this,SLOT(textClicked()));
programBtn->setFixedHeight(80);
programBtn->setFixedWidth(80);
programBtn->setAccessibleDescription(files[i]);
programBtn->setAccessibleName(files[i]);
// programBtn->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
// programBtn->setAccessibleDescription(sID);
// programBtn->setCheckable(true);
// programBtn->setAutoExclusive(true);
programBtn->setStyleSheet("border-image: url(./images/"+files[i]+".png)"); //括号内为图片的相对目录
programBtn->setIconSize(QSize(150,150)); //设置图片大小
mainLayout->addWidget(programBtn,rownum,cloumnum);
//mainLayout->addWidget(labelword,2*rownum+1,cloumnum);
programBtn->show();
//labelword->show();
}
}
这样做出来的界面需要做界面背景才好看,并且,程序扩展满主界面的所在的页面图片就没办法再显示上去,这种图片下面也不容易加文字注释,最后改成listwidget控件,我首先看到QT4.8库安装的时候例程里有个configdialog工程,里面代码如下
ConfigDialog::ConfigDialog()
{
contentsWidget = new QListWidget;
contentsWidget->setViewMode(QListView::IconMode);
contentsWidget->setIconSize(QSize(96, 84));
contentsWidget->setMovement(QListView::Static);
contentsWidget->setMaximumWidth(128);
contentsWidget->setSpacing(12);
pagesWidget = new QStackedWidget;
pagesWidget->addWidget(new ConfigurationPage);
pagesWidget->addWidget(new UpdatePage);
pagesWidget->addWidget(new QueryPage);
QPushButton *closeButton = new QPushButton(tr("Close"));
createIcons();
contentsWidget->setCurrentRow(0);
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
QHBoxLayout *horizontalLayout = new QHBoxLayout;
horizontalLayout->addWidget(contentsWidget);
horizontalLayout->addWidget(pagesWidget, 1);
QHBoxLayout *buttonsLayout = new QHBoxLayout;
buttonsLayout->addStretch(1);
buttonsLayout->addWidget(closeButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(horizontalLayout);
mainLayout->addStretch(1);
mainLayout->addSpacing(12);
mainLayout->addLayout(buttonsLayout);
setLayout(mainLayout);
setWindowTitle(tr("Config Dialog"));
}
代码实现的界面效果如下
我最初照着程序搬上去实现不了我要的效果,我想实现图片一排排的放,每行放三四个,我比较笨,于是一个个函数试验,修改参数,最后把setMaximumWidth(128);的参数中的128修改成我的界面的宽度才满足了我的需要。实现了图片一行行的摆放,
按钮添加就是按照这个方法,代码如下
void ConfigDialog::createIcons()
{
QListWidgetItem *configButton = new QListWidgetItem(contentsWidget);
configButton->setIcon(QIcon(":/images/config.png"));
configButton->setText(tr("Configuration"));
configButton->setTextAlignment(Qt::AlignHCenter);
configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *updateButton = new QListWidgetItem(contentsWidget);
updateButton->setIcon(QIcon(":/images/update.png"));
updateButton->setText(tr("Update"));
updateButton->setTextAlignment(Qt::AlignHCenter);
updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *queryButton = new QListWidgetItem(contentsWidget);
queryButton->setIcon(QIcon(":/images/query.png"));
queryButton->setText(tr("Query"));
queryButton->setTextAlignment(Qt::AlignHCenter);
queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
connect(contentsWidget,
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
}
我把程序编译完下到板子上同一个程序不能被连续调用,每次只能调用一次,下次换调用别的程序才行,试了好大大会才知道是因为信号采用了currentItemChanged(QListWidgetItem*,QListWidgetItem*)),的原因,我改成clicked(QListWidgetItem*,QListWidgetItem*),程序在Pc机上运行还可以,但是下到板子上就反映很迟钝,后来一个个函数试验,换成
connect(contentsWidget,SIGNAL(itemEntered(QListWidgetItem*)),this,SLOT(ItemClicked(QListWidgetItem*)));
下到板子上可以很灵敏,效果很好,希望能对大家有用。
void MainWindow::createButtons()
{
QPushButton *programBtn;
QLabel *labelword;
programDir = QDir(PROGRAMPATH);
QStringList files;
int rownum,cloumnum;
files = programDir.entryList(QStringList("*"),
QDir::Files | QDir::NoSymLinks|QDir::Executable);
for (int i = 0; i < files.size(); ++i) {
rownum=i/4;
cloumnum=i%4;
// QFile file(programDir.absoluteFilePath(files[i]));
// programBtn=new QPushButton(files[i],this);
programBtn=new QPushButton(tr(""),this);
// labelword=new QLabel(files[i],this);
//labelword->setBuddy(programBtn);
connect(programBtn,SIGNAL(clicked()),this,SLOT(btnClicked()));
// connect(labelword,SIGNAL(clicked()),this,SLOT(textClicked()));
programBtn->setFixedHeight(80);
programBtn->setFixedWidth(80);
programBtn->setAccessibleDescription(files[i]);
programBtn->setAccessibleName(files[i]);
// programBtn->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
// programBtn->setAccessibleDescription(sID);
// programBtn->setCheckable(true);
// programBtn->setAutoExclusive(true);
programBtn->setStyleSheet("border-image: url(./images/"+files[i]+".png)"); //括号内为图片的相对目录
programBtn->setIconSize(QSize(150,150)); //设置图片大小
mainLayout->addWidget(programBtn,rownum,cloumnum);
//mainLayout->addWidget(labelword,2*rownum+1,cloumnum);
programBtn->show();
//labelword->show();
}
}
这样做出来的界面需要做界面背景才好看,并且,程序扩展满主界面的所在的页面图片就没办法再显示上去,这种图片下面也不容易加文字注释,最后改成listwidget控件,我首先看到QT4.8库安装的时候例程里有个configdialog工程,里面代码如下
ConfigDialog::ConfigDialog()
{
contentsWidget = new QListWidget;
contentsWidget->setViewMode(QListView::IconMode);
contentsWidget->setIconSize(QSize(96, 84));
contentsWidget->setMovement(QListView::Static);
contentsWidget->setMaximumWidth(128);
contentsWidget->setSpacing(12);
pagesWidget = new QStackedWidget;
pagesWidget->addWidget(new ConfigurationPage);
pagesWidget->addWidget(new UpdatePage);
pagesWidget->addWidget(new QueryPage);
QPushButton *closeButton = new QPushButton(tr("Close"));
createIcons();
contentsWidget->setCurrentRow(0);
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
QHBoxLayout *horizontalLayout = new QHBoxLayout;
horizontalLayout->addWidget(contentsWidget);
horizontalLayout->addWidget(pagesWidget, 1);
QHBoxLayout *buttonsLayout = new QHBoxLayout;
buttonsLayout->addStretch(1);
buttonsLayout->addWidget(closeButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(horizontalLayout);
mainLayout->addStretch(1);
mainLayout->addSpacing(12);
mainLayout->addLayout(buttonsLayout);
setLayout(mainLayout);
setWindowTitle(tr("Config Dialog"));
}
代码实现的界面效果如下
我最初照着程序搬上去实现不了我要的效果,我想实现图片一排排的放,每行放三四个,我比较笨,于是一个个函数试验,修改参数,最后把setMaximumWidth(128);的参数中的128修改成我的界面的宽度才满足了我的需要。实现了图片一行行的摆放,
按钮添加就是按照这个方法,代码如下
void ConfigDialog::createIcons()
{
QListWidgetItem *configButton = new QListWidgetItem(contentsWidget);
configButton->setIcon(QIcon(":/images/config.png"));
configButton->setText(tr("Configuration"));
configButton->setTextAlignment(Qt::AlignHCenter);
configButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *updateButton = new QListWidgetItem(contentsWidget);
updateButton->setIcon(QIcon(":/images/update.png"));
updateButton->setText(tr("Update"));
updateButton->setTextAlignment(Qt::AlignHCenter);
updateButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem *queryButton = new QListWidgetItem(contentsWidget);
queryButton->setIcon(QIcon(":/images/query.png"));
queryButton->setText(tr("Query"));
queryButton->setTextAlignment(Qt::AlignHCenter);
queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
connect(contentsWidget,
SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
}
我把程序编译完下到板子上同一个程序不能被连续调用,每次只能调用一次,下次换调用别的程序才行,试了好大大会才知道是因为信号采用了currentItemChanged(QListWidgetItem*,QListWidgetItem*)),的原因,我改成clicked(QListWidgetItem*,QListWidgetItem*),程序在Pc机上运行还可以,但是下到板子上就反映很迟钝,后来一个个函数试验,换成
connect(contentsWidget,SIGNAL(itemEntered(QListWidgetItem*)),this,SLOT(ItemClicked(QListWidgetItem*)));
下到板子上可以很灵敏,效果很好,希望能对大家有用。
相关文章推荐
- QT界面中工具栏图标无法显示
- Qt浅谈之三十七界面文字显示动态化
- QT之在toolButton中添加图标和文字,使文字显示在图标下方
- [PyQt]使用Qt Designer设计师完成PyQt界面图标设计
- Android 中menu同时显示图标和文字的实现
- QT 和SDL VDC NVR 双屏界面显示,最多可以支持4块屏
- QT透明显示文字
- Qt获取系统默认图标,显示到QListWidget内
- Qt 界面:窗口图标以及任务栏图标的设置
- QT界面显示实时时间
- [Qt]QCombobox下拉列表文字显示一半的问题
- qt界面程序编译好,换台电脑部分按钮图片无法显示
- Qt之界面实现技巧-- 窗体显示,绘制背景,圆角,QSS样式
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- 让QToolBar工具栏的按钮既显示图标又显示文字
- Android手势识别 Camera 预览界面上显示文字 布局注意事项(merge布局)
- MFC让按钮控件显示*.ico图标和文字说明
- qt生成exe文件,界面的工具栏图片有qrc生成无法显示问题
- 如何显示链接的REVIT模型中的注释文字