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

Is there a function that can display an object from a class that I've created into a QTextBrowser?

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

我目前正在使用我的 Rational class,它以 "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

我得到 "semantic issue" 没有从 'Rational' 到 QString/const 的可行转换 std::string 。我似乎找不到将这些对象转换或显示到 QTextBrowser 中的方法。

编辑:这是有理数 class

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;
     }        

};

仅显示我正在使用的函数的函数定义,其他未显示定义的函数是我在本程序中不会使用的函数。

您正在寻找这样的东西吗?

像这样编辑您的代码:

  • 向您的 类 添加一个 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
    }
}

希望对您有所帮助。

i'm unsure on how to display objects from classes that i've created into the QTextBrowser. Is there a function that can do this?

只要你写一个。这是你的class,所以提供这样的功能是你的工作。

如何处理这取决于您的 class 的用途。如果可以合理地将您的 class 视为一个字符串(对于有理数来说似乎不太可能),您可以提供一个隐含的 user-defined conversion to string. You should not provide an implicit conversion in other cases since implicit conversions often hamper the compiler's ability to identify bugs. An explicit conversion is another option, but often people go with a conversion function. (Examples from the standard library include stringstream::str and bitset::to_string.)

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