小编MHM*_*MHM的帖子

如何知道在Qt中单击了哪个按钮?

我的表单中有8个按钮(btn1,btn2,btn3,...,btn8)。每个按钮的文本均来自数据库。我在数据库中定义了8个函数。这些是我的领域:

ID, Text, Active  
Run Code Online (Sandbox Code Playgroud)

当用户按下每个按钮时,我应该将函数名称保存在数据库中。首先,所有按钮都被隐藏。在页面加载中,我从数据库读取数据以显示功能按钮的文本;如果功能按钮未激活,则该按钮也不可见。

这是我的代码:

ui->btn1->hide();
ui->btn2->hide();
ui->btn3->hide();
ui->btn4->hide();
ui->btn5->hide();
ui->btn6->hide();
ui->btn7->hide();
ui->btn8->hide();
 QSqlQueryModel *lst=database->getFunctions();
 QString st;

 QStringList btnlst;
 for(int i = 0; i < lst->rowCount(); ++i)
 {
     if(lst->record(i).value(2).toInt()==1)//ACTIVE
     {
         btnlst<<(lst->record(i).value(3).toString());//text
     }
 }
 for(int i = 0; i < btnlst.count(); ++i)
 {
     QPushButton *btn=this->findChild<QPushButton>(st.append(QString::number(i)));
     btn->setText(btnlst[i]);
     btn->show();
     connect(btn,SIGNAL(clicked()),this,SLOT(Function()));
 }  
Run Code Online (Sandbox Code Playgroud)

在该代码中,我将所有活动函数保存在列表中,然后获取列表计数。例如,如果列表的长度为3,则btn1btn2btn3应该以我的形式显示,而其他应保持隐藏状态。然后,我将所有按钮clicked()信号连接到名为的插槽Function()

我想使用用户在表单中按下的按钮的文本。如何查找单击了哪个按钮,以及如何获取该按钮的文本?

qt

2
推荐指数
1
解决办法
3467
查看次数

在c ++ builder中的com dll中使用过的BSTR混淆

我在C++ Builder Borland中创建了一个OCX.我的OCX具有以下功能:

  • 登录
  • DebugOutput
  • GETVAL

我在我的c#应用程序中使用此OCX.在c#侧我有一个按钮和列表框.按钮login从OCX 调用方法,列表框显示此方法的输出.

在OCX端,该login方法为服务器(使用套接字编程)创建命令以进行身份​​验证.然后调用Write函数来写入socket.然后从socket和调用Read函数获取响应以读取套接字响应.

Read方法读取结果,并将其发送到DebugOutput调试输出流,并调用GetVal找到最后一个主服务器的响应.然后他们将参数传递给对方.毕竟C#端显示登录方法的结果(SUCCESS | FAIL).

我用了BSTR.(我在stackoverflowMSDN上阅读了有关BSTR的主题,但我认为我的解决方案并没有得到很好的解决方案).这些是我在OCX方面的代码:

BSTR STDMETHODCALLTYPE TVImpl::Login(BSTR PassWord)
{
  wchar_t wcs1[500];
  Var *var=new Var();
  //here make the command
  ...................
  //get the server response to show to user
  BSTR read=::SysAllocString(Write(wcs1));
  if(read!=NULL) ::SysFreeString(read);

  return read;
}

BSTR STDMETHODCALLTYPE TVImpl::Read()
{
  BSTR str ;
  try
  {
   IdTCPClient1->ReadTimeout=100;
   str =::SysAllocString( IdTCPClient1->IOHandler->ReadLn().c_str());
  }
  catch(Exception &e)
  { …
Run Code Online (Sandbox Code Playgroud)

c++ com bstr

0
推荐指数
2
解决办法
456
查看次数

标签 统计

bstr ×1

c++ ×1

com ×1

qt ×1