【问题标题】:How to show simple (but customized) dialog in my own c++ application如何在我自己的 C++ 应用程序中显示简单(但自定义)对话框
【发布时间】:2021-06-21 02:12:51
【问题描述】:

我正在寻找简单的解决方案,通过使用对话框从用户那里获取一些数据。

我不想使用 MFC,因为它应该是跨平台的。 我已经阅读并运行了一些 QT 和 wxWidgets 的示例,但问题是它们使用自己的“自己的”主入口点,所以我不知道如何在我的应用程序中组合它们。

这是我正在尝试做的一个示例:

int main()
{
    std::cout << "Please choose the dialog! Press 1 or 2" << std::endl;
    int key = 0;
    std::cin >> key;

    if (key == 1)
    {
        Dialog1 dlg; //This is my question! how to do that?
        dlg.show();

        //Get data drom dialog:
        std::string str1 = dlg.GetData(ID_EDIT_BOX_1);
        std::string str2 = dlg.GetData(ID_EDIT_BOX_2);
    }

    if (key == 2)
    {
        Dialog2 dlg;
        dlg.show(); //Show simple dialog with some edit boxes

        //Get data drom dialog:
        std::string str1 = dlg.GetData(ID_EDIT_BOX_1);
        std::string str2 = dlg.GetData(ID_EDIT_BOX_2);
    }
}

我的意思是我知道如何创建和调用对话框,但不知道如何在我的应用程序中组合它们并以特定的方式调用它们 em> 行...

谢谢。

【问题讨论】:

  • this 链接。它具有可以回读的字段。
  • @yonatan,你是应用程序控制台还是 GUI?
  • @Igor,它是一个控制台应用程序
  • @Yonatan,为什么要在控制台应用程序中显示 gui?并不是说它不能完成 - 只是很奇怪。
  • @Igor,实际上它是基于 opencv 的应用程序应该处理一些图像。我希望用户修改处理参数并用imshow得到结果...

标签: c++ qt user-interface cross-platform wxwidgets


【解决方案1】:

使用 wxWidgets,您可以使用 wxInitialize() 初始化库,使用 wxDialog::ShowModal() 显示您的对话框,然后使用 wxUninitialize() 将其关闭并根据需要重复。如果您需要显示许多对话框,每次都这样做显然不是很有效,但是如果您真的想制作一个完全独立的函数来询问用户的值,您可以这样做。

【讨论】:

    【解决方案2】:

    谁想知道我想出了一个带有小 python 脚本的解决方案。 此脚本使用 tkinter 弹出对话框,并将结果保存在文本文件中。 即,我替换了该行:

    dlg.show();

    与:

    system("python dialogScript.py");

    而且效果很好。

    该脚本与可以手动更新的参数文件一起使用,并且根本不应更改该脚本。 它动态解析txt文件并根据参数列表添加控件。

    这里是python脚本:

    import tkinter as tk                    
    from tkinter import ttk
    
    def OnClickOKButton():
    
        for i in range(len(parameters)):
        
            line = lines[i + 1].split(",")
            line[3] = str(parameters[i].get())
            line = ','.join(line)
            lines[i+1] = line
        
        file = open('parameters.txt', 'w')
        file.writelines(lines)
        file.close()
    
        root.destroy()
    
    file = open('parameters.txt', 'r')
    
    root = tk.Tk()
    root.title("Configuration dialog")
    
    tabControl = ttk.Notebook(root)
    tabControl.grid(column= 0, row = 0)
    
    buttonOK = ttk.Button(root, text = "OK", command = OnClickOKButton)
    buttonOK.grid(column= 0, row = 1)
    
    lines = []
    line = file.readline()
    lines.append(line)
    line = line.split(",")
    
    tabs = []
    for i in range(int(line[0])):
        tabs.append(ttk.Frame(tabControl))
    for i in range(int(line[0])):
        tabControl.add(tabs[i], text = line[i+1])
    
    while True:
        line = file.readline()
        if not line:
            break
        
        lines.append(line)
    file.close()
    
    parameters = []
    lastTab = int(-1)
    parameterIndex = 0
    for i in range(len(lines) - 1):
        line = lines[i + 1].split(",")
        paramValue = tk.DoubleVar()
        paramValue.set(line[3])
        parameters.append(paramValue)
        if (lastTab != int(line[0])):
            lastTab = int(line[0])
            parameterIndex = 0
        ttk.Label(tabs[int(line[0])], text = line[2]).grid(padx = 15, pady = 15, column = 0, row = parameterIndex)
        if line[1] == "bool":
            ttk.Checkbutton(tabs[int(line[0])], variable = paramValue).grid(padx = 15, pady = 15, column = 1, row = parameterIndex)
        
        if line[1] == "double":
            ttk.Entry(tabs[int(line[0])], width = 15, textvariable = paramValue).grid(padx = 15, pady = 15, column = 1, row = parameterIndex)
    
        ttk.Label(tabs[int(line[0])], text = line[4]).grid(padx = 15, pady = 15, column = 2, row = parameterIndex)
        parameterIndex += 1
    
    root.mainloop()
    

    那么,txt参数文件应该是这样的:

    3,tab0,tab1,tab2,
    0,bool,parameter1,0.0,description1,
    0,double,parameter2,100.0,description2,
    1,double,parameter3,100.0,description3,
    1,bool,parameter4,1.0,description4,
    2,double,parameter5,200.0,description5,
    2,bool,parameter6,1.0,description6,
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多