• 5387阅读
  • 8回复

大家帮忙解决关于QListWidget的问题 [复制链接]

上一主题 下一主题
离线happyant
 
只看楼主 倒序阅读 楼主  发表于: 2008-09-01
— 本帖被 XChinux 执行加亮操作(2008-09-03) —
我程序中有两个QListWidget,分别取名list1与list2,list1中的选项我在designer里写定了,list2中的选项根据list1所选中的项来更换~
在构造函数中连接信号与slot:
QObject::connect(ui.list1, SIGNAL(currentChanged(int)), this, SLOT(on_list1_selected()));
QObject::connect(ui.list2, SIGNAL(currentChanged(int)), this, SLOT(on_list2_selected()));

slot函数:
void mainwnd::on_list1_selected()
{
ui.list2->clear();
int tmpRow=ui.list1->currentRow();
switch(tmpRow)
{
case 0:
    ui.list2->addItem(tr("进程信息配置"));
    ui.list2->addItem(tr("进程信息配置"));
                    break;
case 1:
//……省略

default:  break;

}
//根据我程序需要的其它一些操作语句
}

void mainwnd::on_list2_selected()
{
//我程序的其它实现
//根据list2的选项来读取不同的数据表
}

现在有这样两个问题:
1、如果我的signal用的是currentRowChanged(int),那么在程序运行后,将自动将list1选中为0(其默认未选定时为-1),因此当前行改变,执行了on_list1_selected函数,list2中有对应list1选0时的选项,这是我所不希望的;
2、如果我将信号更改为itemSelectionChange(void,那么,可以解决1所出现的问题。
但是,假如我list1选了0,list2选了某一项之后(比如2),我再在list1中重新选择(比如这次选1),那么选择1后,要执行on_list1_selected函数,对list2进行clear操作,这时,list2的选项也有2变成了-1,因此执行on_list2_selected()。这也是我不希望的结果。
currentRowChanged和itemSelectionChange信号在选中了某项后,执行clear操作都会这样。按照代码分析,执行slot是应该的,但是我的程序并不希望在clear的时候执行slot函数,只在我选中某项的时候执行。
请教各位达人,我应该怎么来实现。
离线happyant
只看该作者 1楼 发表于: 2008-09-01
天天关注~~~~~~~~~~~~~~~~~~~~~~~~~~  刚学,大家多帮忙
离线happyant
只看该作者 2楼 发表于: 2008-09-01
这么快进沉了啊………… 在线等
离线happyant
只看该作者 3楼 发表于: 2008-09-01
又沉~~~~~~~~
我已经蒙了,大家来救救我……
离线happyant
只看该作者 4楼 发表于: 2008-09-01
使用currentRowChanged(int)信号,在程序启动后,将自动将ROW设为0,之前在designer里设置的默认值为-1
离线happyant
只看该作者 5楼 发表于: 2008-09-01
失望
离线water_wf

只看该作者 6楼 发表于: 2008-09-01
signal/slot这是一种机制,想个框架,只要能捕捉信号,你完全可以自己操作,可以用判断当前状态,而且看了两边也没看明白你的意思? 居然能捕捉到change的信号,其它完全就和你的具体要求相关了
离线happyant
只看该作者 7楼 发表于: 2008-09-05
我是在connect了signal和slot之后,在slot中用QMessageBox来显示了当前行~~才知道的~
诶~  我也说不清楚了,不想研究这个问题了~第二个问题的确可以通过状态来判断~~~~~
但是第一个问题,我用以下的语句来测试:
在MyWidget的构造函数中有:
MyWidget::Mywidget()
{
QMessageBox::information(NULL,"test",QString("%1").arg(ui.tablewidget->currentRow());
setupUi(this);
}
在slot中有
MyWidget::Myslot()
{
QMessageBox::information(NULL,"test",QString("%1").arg(ui.tablewidget->currentRow());
...//省略
}
我是将currentRow(in)信号将listWidget与此slot连接起来的,
运行的结果是先弹出对话框,内容为-1(当前行),接着弹出0。
可以试一下
离线aheadgong200
只看该作者 8楼 发表于: 2009-08-14
新手跟楼主同样的问题啊
快速回复
限100 字节
 
上一个 下一个