是否有一个函数可以显示我在QTextBrowser中创建的类中的对象?

时间:2019-06-01 20:33:42

标签: c++ qt qtextbrowser

我正在创建一个GUI,用于存储和显示各种数据类型的对象,例如int,double,string和我创建的其他三个类(Rational,Date和Complex)。这些对象存储在相同类型的链接列表中。对于int,double和string,我不得不将存储用户输入的 QPlainTextEdit 的值存储到列表中并将它们显示在 QTextBrowser 中的问题,但是,我我不确定如何显示我在QTextBrowser中创建的类中的对象。有功能可以做到这一点吗?

我目前正在使用Rational类,该类以“ Rational(3,4);” 的形式接收对象,并将其显示为类似于“ 3/4之类的分数“ 。 我设法从用户​​输入中以“ 3/4”形式创建对象,并将其推入链接列表,但是我无法将其显示在我的QTextBrowser中。

//sample code
else if(ui->Rational_button->isChecked())
{
    ui->main_display->setText("");

    //Iterator that goes through the linked list to get the objects
    LinkedList<Rational>::Iterator it = rationalvec.begin();

    while(it != nullptr)
    {
       ui->main_display->append(QString::fromStdString(*it)); 
                                      /* Trying to display all Rational 
                                      objects in the QTextBrowser */
       ++it;                    
    }
}

//There should be an output like the following inside the QTextBrowser

4/5
2/3
7/9
9/11

//These are all Rational type objects

我遇到了“语义问题” 从'Rational'到QString / const std :: string 的转换不可行。我似乎找不到找到将这些对象转换或显示为QTextBrowser的方法。

编辑:这是Rational类

class Rational
{
private:
    int numer;  //IN/OUT - the numerator int
    int denom;  //IN/OUT - the denominator int
public:
    /******************************
    ** CONSTRUCTOR & DESTRUCTOR **
    ******************************/
    Rational()         //Constructor
    {
       numer = 0;
       denom = 1;
    }
    Rational(int number)               //Constructor
    {
       numer = number;
       denom = 1;
    }
    Rational(int number1, int number2) //Constructor
    {
      numer = number1;
      denom = number2;
    }  

    /***************
    ** ACCESSORS **
    ***************/
    const Rational add(const Rational &) const;
    const Rational subtract(const Rational &) const;
    const Rational multiply(const Rational &) const;
    const Rational divide(const Rational &) const;

    void display() const
    {
       cout << numer << "/" << denom;
    }

    friend ostream& operator<<(ostream &, const Rational &)    //FOR WIDGET
    {
       out << object.numer;
       out << '/';
       out << object.denom;

       return out;
   }

    bool operator <(const Rational& )                          //FOR WIDGET
    {
       if((numer/denom) < (other.numer/other.denom))
           return true;
       else
           return false;
    }
    bool operator >(const Rational& )                          //FOR WIDGET
    {
       if((numer/denom) > (other.numer/other.denom))
           return true;
       else
           return false;
     }        

};

仅显示我正在使用的功能的功能定义,未显示定义的其他功能是该程序期间不使用的功能。

2 个答案:

答案 0 :(得分:0)

您正在寻找类似的东西吗?

像这样编辑代码:

  • 向您的班级添加toString函数:
class Rational
{

...

public:
    QString toString() [
        return QString::number(numer) + "/" + QString::number(denom);
    }

...

}
  • QTextBrowser中显示:
else if(ui->Rational_button->isChecked())
{
    ui->main_display->setText("");

    for( Rational r : rationalvec )
    {

       ui->main_display->append( r.toString() );    // Here use toString() to append
                                                    // it->toString() if iterator
    }
}

希望它对您有帮助。

答案 1 :(得分:0)

  

我不确定如何显示我在QTextBrowser中创建的类中的对象。有功能可以做到这一点吗?

只有写一个。这是您的课程,因此提供这样的功能是您的工作。

如何进行此操作取决于类的使用方式。如果将您的类视为字符串是合理的(对于有理数来说似乎不太可能),则可以向string隐式提供user-defined conversion。在其他情况下,您不应该提供隐式转换,因为隐式转换通常会妨碍编译器识别错误的能力。显式转换是另一种选择,但是人们通常会使用转换功能。 (标准库中的示例包括stringstream::strbitset::to_string。)

您已经编写了大多数转换函数。您所需要做的就是将对象流式传输到std::stringstream,然后调用该流的str()方法。尽可能合理地重用您的代码。