qt第一次工作使用到的方法总结
List Widget使用
List Widget节点遍历
for (int i = 0; i < ui->listWidget->count(); i++)
{
ui->listWidget->item(i)->操作;
}
List Widget复选框使用
全选
//list wigget中的节点不是一定要是复选框,视具体情况具体分析
for (int i = 0; i < ui->listWidget->count(); i++)
{
ui->listWidget->item(i)->setCheckState(Qt::Checked);
}
清空选择:
for (int i = 0; i < ui->listWidget->count(); i++)
{
ui->listWidget->item(i)->setCheckState(Qt::Unchecked);
}
List Widget复选框禁用,只能看不能手动修改
for (int i = 0; i < ui->listWidget_2->count(); i++)
{
ui->listWidget_2->itemWidget(ui->listWidget_2->item(i))->setEnabled(false); //展现灰化,不可操作
ui->listWidget_2->item(i)->setFlags((Qt::ItemFlag)0);
}
comboBox使用
使comboBox下拉框选定节点跳转
//用作初始化显示位置或者点击某处触发跳转
ui->comboBox->setCurrentIndex(2);//这里的2指复选框里节点的第三个
将数据库查询到的内容选定列加入到comboBox内
QStringList user_list;
QSqlQuery query;
query.exec("SELECT 查询语句");
while (query.next())
{
user_list << query.value(0).toString();
}
ui->comboBox->addItems(user_list);
tablewidget使用
使tablewidget选定节点跳转
//用作初始化显示位置或者点击某处触发跳转
ui->tabWidget->setCurrentIndex(0);
tablewidget 移除卡片
ui->tabWidget->removeTab(0);//这里的0指第一页
//这里在使用过程中出现一个问题:
//“当先移除页码较小页的时候,后面的页数会自动补上空位”
//也就是说,当想要移除第三页与第六页时,
//如果先ui->tabWidget->removeTab(2);再ui->tabWidget->removeTab(5);一定达不到想要的效果
//但如果先ui->tabWidget->removeTab(5);再ui->tabWidget->removeTab(2);就能够实现移除第三页与第六页
treeWidget使用
使treewidget内容中的子级初始化展开
ui->treeWidget->expandAll();//定义初始化展开
使treewidget内容中的子级初始化展开并锁死不可收起
ui->treeWidget->setItemsExpandable(false);//设置不可拉伸
ui->treeWidget->expandAll();
遍历treewidget内容
QTreeWidgetItemIterator ip(ui->treeWidget);
while (*ip)
{
{
操作内容;
}
++ip;
}
TreeWidget复选框使用
全选:
QTreeWidgetItemIterator ip(ui->treeWidget);
while (*ip)
{
if ((*ip)->checkState(0) == Qt::Checked)
{
(*ip)->setCheckState(0, Qt::Unchecked);
}
++ip;
}
清空选择:
QTreeWidgetItemIterator ip(ui->treeWidget);
while (*ip)
{
if ((*ip)->checkState(0) == Qt::Unchecked)
{
(*ip)->setCheckState(0, Qt::Checked);
}
++ip;
}
TreeWidget复选框遍历判断对应节点勾选
没有在网络上查到有效的遍历判断节点勾选的方法,但是在午休做梦的时候突然想到了一个办法
int a[13] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41};
int *arr = a;
long long x1 = 1;
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it)
{
if ((*it)->checkState(0) != Qt::Unchecked)
{
x1 *= *arr;
}
++it;
arr++;
}
//这里定义了一个全部是素数的数组,遍历了一次treewidget中的节点,判断如果勾选的,乘上对应的素数,如果未勾选,数组往下加一,节点往下加一,这样节点与数组的素数就完全对应上
//因为素数的关系,素数没有多余的因数,所以如果某个数能除得尽一个素数,一定是有一个与这个素数本身相乘的过程(在我举例的这个全是素数的数组的情况下)
//举例:如果x1被2整除,那么第一个节点框一定被勾选
//将这里得到的素数乘积存入数据库,就可以由此得到此时复选框的状态
LONGLONG y = 0;
QSqlQuery query;
query.exec("得到上述素数乘积的数据库查询语句");
if (query.next())
{
y = query.value("上述乘积的名").toLongLong();
}
int a[13] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41};
int *arr = a;
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it)
{
if (y % *arr == 0)
(*it)->setCheckState(0, Qt::Checked);
else
(*it)->setCheckState(0, Qt::Unchecked);
++it;
arr++;
}
//这里的方法还是有使用限制,大家都知道,不断增长的数乘积的成长速度是非常快的,如果乘积长度连longlong都顶不住了
//那就只能换别的办法,比如定义一个数组,勾选了一个,就将数组的一位置一,反之置零,同样数组跟着节点走,应该也是可以实现的
//并且比上述方法好用
checkBox使用
禁用checkbox后并将其设为不可见
ui->checkBox->setEnabled(false);//禁用
ui->checkBox->setVisible(false);//不可见
//适用于权限分割
//setVisible(false);同样适用于菜单选项与按钮等控件
setVisible(false)使用
//不可见,适用于权限分割
ui->checkBox->setVisible(false);
ui->menu->menuAction()->setVisible(false);//菜单不可见,例如:使“开始”不可见
ui->action_softLog->setVisible(false);//菜单内的选项不可见,例如:使“开始——附件”不可见
//等等;
QMessageBox使用
跳出设定提示,并可以设定选项回答
int ret = QMessageBox::information(this, "询问", "提示", "取消", "确认", nullptr, 1);
//询问作为标题,提示写上弹窗的目的,取消与确认作为选项,后面的1是初始化选中的位置
if (ret == 0) //判断返回的按钮参数
{
QMessageBox::information(this, "pramater return", "取消修改!");//这里又是一个弹窗
return;
}
else if (ret == 1)
{
QMessageBox::information(this, "pramater return", "修改完成!");//弹窗
query.exec();
}
初始选中的状态: