信号和插槽
Signals and Slots
我写了一些代码,如果我以客户身份登录,它应该隐藏列customer
(该列的值为 1)。我需要将参数传递给信号。我用了我的customerLogin
是isSa
.如何将这些参数传递给信号和插槽?
Main.cpp
:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
initialize();
SafeOTPWindow w;
Login login;
login.connect(&login, SIGNAL(loggedIn()), &w, SLOT(show()) );
login.connect(&login, SIGNAL(loginCancelled() ), &w, SLOT(close()) );
login.show();
a.exec();
}
Login.h
:
#ifndef LOGIN_H
#define LOGIN_H
#include <QDialog>
namespace Ui {
class Login;
}
class Login : public QDialog
{
Q_OBJECT
public:
explicit Login(QWidget *parent = 0);
~Login();
bool isSa;
signals:
void loggedIn();
void loginCancelled();
private slots:
void on_buttonBox_accepted();
void on_buttonBox_rejected();
private:
Ui::Login *ui;
};
#endif // LOGIN_H
这是我的另一个文件,我需要在其中隐藏列(Customer
),OtpWindow.cpp
:
void SafeOTPWindow::initLogTable()
{
QList<OtpLog> logs;
int ret = otpRepo.fetchOtpLogs(logs);
if( ret != errorCodes::SUCCESS )
{
QMessageBox msgBox(QMessageBox::Critical, QString("SafeOTP"),
QString("OTPLogs could not be fetched"),QMessageBox::Ok, this);
msgBox.exec();
QLOG_ERROR() << "fetchLogs error " << ret;
return;
}
QStandardItemModel *model = new QStandardItemModel(0,5,this); //5 columns
model->setHorizontalHeaderItem(0, new QStandardItem(QString("Date")));
model->setHorizontalHeaderItem(1, new QStandardItem(QString("Customer")));
model->setHorizontalHeaderItem(2, new QStandardItem(QString("Server")));
model->setHorizontalHeaderItem(3, new QStandardItem(QString("Authorized by")));
model->setHorizontalHeaderItem(4, new QStandardItem(QString("Description")));
for(QList<OtpLog>::Iterator lIt = logs.begin(); lIt != logs.end(); lIt++)
{
OtpLog& log = *lIt;
QList<QStandardItem*> row;
row.push_back(new QStandardItem(log.when.toString("dd MMM yyyy, hh:mm")));
row.push_back(new QStandardItem(QString(log.customer)));
row.push_back(new QStandardItem(QString(log.server)));
row.push_back(new QStandardItem(QString(log.author)));
row.push_back(new QStandardItem(QString(log.reason)));
model->appendRow(row);
}
// set the data model
ui->tblLog->setModel(model);
//Set the column to hide
ui->tblLog->setColumnHidden(1,true);
// set the column widths
int tw = ui->tblLog->width() - 5;
int w = tw / 6;
for(int i=0; i<4;i++)
{
ui->tblLog->setColumnWidth(i,w);
tw -= w;
}
ui->tblLog->setColumnWidth(4,tw);
}
对于插槽/信号示例,您需要连接两个具有相同参数的对象。 所以让我稍微修改一下你的例子:
假设您有:
signals:
void loginStatusChanged(bool isLoggedIn);
在您的登录方法中,您将得到如下内容:
bool status = checkLogin();
emit loginStatusChanged(status);
然后你应该在SafeOTPWindow中有一个专用的插槽做这样的事情:
void SafeOTPWindow::UpdateTableAfterLogin(bool isLoggedIn)
{
ui->tblLog->setColumnHidden(1,isLoggedIn);
}
然后像往常一样连接:
connect(&login, SIGNAL(loginStatusChanged()), &w, SLOT(UpdateTableAfterLogin(bool)) );
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- QObject::连接无法将信号连接到*this*对象的插槽
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 从 QWidgetList 访问 QWidget 子插槽/信号 (QList<QWidget*>)
- 两个对象QT之间的示例插槽/信号
- QT对象::连接:没有此类插槽信号到线程插槽
- Qt QAxWidget - WebBrowser手动设置插槽/信号
- 没有这样的插槽/信号(Qt)